import java.util.Random;
import java.util.Arrays;

public class ArrayTest {
    /**
     * 1. 定义一个长度为[16][16]的整型二维数组
     * 2. 并输入或指定所有位置的元素值，
     * 3. 分别实现二维数组中所有行和所有列中所有元素的累加和并打印。
     * 4. 再分别实现二维数组中左上角到右下角和右上角到左下角所有元素的累加和并打印
     */
    // 定义二维数组
    public int[][] arr = new int[16][16];

    public ArrayTest() {
        // 给二维数组所有元素赋值
        Random ra = new Random(); // 调用随机数方法
        for (int i=0; i < arr.length; i++) {
            for (int j=0; j < arr[i].length; j++) {
                arr[i][j] = ra.nextInt(999);  // 赋值0到999之间的随机数给二位数组
            }
        }
    }


    public String leftuptorightdown(int[][] arrs) {
        // 定义方法实现X方向的坐标元素相加和
        int _sum1 = 0;    // 左上到右下的相加值变量
        int _sum2= 0;     // 右上到左下的相加值变量
        String str1 = "0";  // 将元素相加已字符串的形式保存并输出
        String str2 = "0";
        for (int i = 0; i < arrs.length; i++) {
            for (int j = 0; j < arrs[i].length; j++) {
                // 左上到右下元素相加
                if (j == i) {
                    _sum1 += arrs[i][j];
                    str1 = str1+ " + "+arrs[i][j];
                }
                // 右上到左下元素相加
                if (i+j==15) {
                    _sum2 += arrs[i][j];
                    str2 = str2 + " + "+arrs[i][j];
                }
            }
        }
        return "从左上到右下累加和为："+ str1 +" = " + _sum1 + "%n从右上到左下累加和为："+ str2 +" = "+ _sum2;
    }

    public void show() {
        int[] colsum = new int[16];  // 定义数组变量存储列元素相加的总和
        // 双重for循环打印二维数组
        for (int i = 0; i<arr.length; i++) {
            System.out.print("{");
            int rowsum = 0;  // 定义行元素相加的总和变量
            for (int j = 0; j < arr[i].length ; j++) {
                System.out.print(arr[i][j]+" ");

                rowsum += arr[i][j];  // 每行的元素相加

                colsum[i] += arr[j][i];  // 每列的元素相加
            }
            System.out.println("} sum = "+rowsum);  // 打印一行数组并打印其相加和
        }
        System.out.println("每列累加和为：");
        System.out.println(Arrays.toString(colsum));   // 打印存储列相加和的一维数组
        System.out.printf(this.leftuptorightdown(arr));  // 打印 X 方向相加和的结果
    }

    public static void main(String[] args) {
        ArrayTest at = new ArrayTest();
        at.show();
    }
}
